iT邦幫忙

第 12 屆 iThome 鐵人賽

0
自我挑戰組

回顧再出發~系列 第 6

SQL MD5 加密 & C# BASE64

  • 分享至 

  • xImage
  •  

C# BASE64

原由:廠商丟了編成 Base64 字串的東西來,接到後,要把它還原.

string a = "abc您好123";
byte[] bytes = System.Text.Encoding.GetEncoding("utf-8").GetBytes(a);

//編成 Base64 字串
string b = Convert.ToBase64String(bytes);

//從 Base64 字串還原
string c = System.Text.Encoding.GetEncoding("utf-8").GetString(Convert.FromBase64String(b));

ref
https://dotblogs.com.tw/alvin26/2013/10/18/124693

SQL MD5

SQL SEVER有提供加密,加密方式有MD2、MD4、MD5、SHA、SHA1 或 SHA2 雜湊
這裡我們用到的是MD5
function HashBytes('MD5',xxx)
e.g.
declare @id varchar(max) ='123456'
HashBytes('MD5',@id)

想說這樣就結束了嗎?
沒有,有幾個地方要注意
1.我們一般用的都是varchar,但它轉成varbinary了,所以要再轉換一下.
2.我們一般不會保留0x,所以在轉換時,要注意要不要保留Pre


1.varbinary轉成varchar
轉換方式有3種
sys.fn_sqlvarbasetostr(@HashBytes)
CONVERT(VARCHAR(50),@HashBytes,1)--Sql Server2008及以上
sys.fn_varbintohexsubstring(1,@HashBytes,1,0)

2.保留Pre與不保留Pre的設定
2.1.sys.fn_sqlvarbasetostr(@HashBytes)

它預設就是會留,所以不要的話,要從第3個開始拿
substring(sys.fn_sqlvarbasetostr(@HashBytes),3,32)

2.2.CONVERT(VARCHAR(50),@HashBytes,@var)
@var 1:保留 2:不保留
e.g.CONVERT(VARCHAR(50),@HashBytes,1)
e.g.CONVERT(VARCHAR(50),@HashBytes,2)

2.3.sys.fn_varbintohexsubstring(@var,@HashBytes,1,0)
@var 1:保留 0:不保留
e.g.sys.fn_varbintohexsubstring(1,@HashBytes,1,0)
e.g.sys.fn_varbintohexsubstring(0,@HashBytes,1,0)

-------------------------------看一看
declare @id varchar(max) ='123456'

select 'w21-保留0x前缀',CONVERT(VARCHAR(50),HashBytes('MD5',@id),1)
union all select 'w22-不保留0x前缀',lower(CONVERT(VARCHAR(50),HashBytes('MD5',@id),2))
--Convert()函数是Sql Server2008及以上版本支持,2008以下版本可以使用下面的方法:
union all select 'w3-cc', substring(sys.fn_sqlvarbasetostr(HashBytes('MD5',@id)),3,32)
--第1个参数表示是否保留0x前缀,1为保留,0为不保留
union all select N'w41-保留0x前缀', sys.fn_varbintohexsubstring(1,HashBytes('MD5',@id),1,0)
union all select N'w40-不保留0x前缀', sys.fn_varbintohexsubstring(0,HashBytes('MD5',@id),1,0)

ref
https://www.cnblogs.com/JuneZhang/p/6396896.html


上一篇
[Report] 怎麼讓篩選條件可以複選
下一篇
[SQL Report] 怎麼插入圖片?怎麼插入分頁?
系列文
回顧再出發~22
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言